#include<stdio.h>
#include<string.h>
#define SIZE 50

typedef struct linear_stack
{
    char a[SIZE];
    int top;
}Stack;

// 初始化栈
void init(Stack *stack){
    stack->top=-1;
}

// 入栈
int push(Stack *stack, char data){
    int top;
    if(stack->top==SIZE-1){
        printf("栈已满...\n");
        return SIZE;
    }
    else{
        stack->a[++(stack->top)] = data;
        return stack->top;
    }
}

// 出栈
char pop(Stack *stack){
    int del;
    if(stack->top==-1){
        printf("栈已空，里面没有元素...\n");
        return -1;
    }
    else{
        del=stack->a[stack->top];
        stack->top--;
        return del;
    }
}

int match(char *data){
    Stack stack;
    init(&stack);
    int len=(int)strlen(data);
    for(int i=0;i<len;i++){
        // 字符只能使用单引号，如果使用双引号就会被认为是字符串，在后面加\0
        if(data[i]=='(' || data[i]=='{'){
            push(&stack, data[i]);
        }
        else{
            int res=pop(&stack);
            if(res!=data[i]){
                break;
            }
        }
    }
    if(stack.top==-1){
        return 1;
    }
    else{
        return 0;
    }
}

// 如果碰到的是左圆括号或者左大括号，直接压栈；
//如果碰到的是右圆括号或者右大括号，就直接和栈顶元素配对：如果匹配，栈顶元素弹栈；反之，括号不匹配；
int main(){
    char test[4] = "{}";
    int result = match(test);
    if(result){
        printf("%s\n", "匹配");
    }
    else{
        printf("%s\n", "不匹配");
    }
    return 0;
}